// Copyright 叶湘 ( weixin:yexiang841, email:yexiang841@qq.com ), Shitouren Studio. All Rights Reserved.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/GameStateBase.h"
#include "PawnState/Q3D_CPPU_PawnState.h"
#include "Q3D_CPPA_GameState.generated.h"

/**
 * 
 */
UCLASS(Blueprintable, ClassGroup = (Q3D), meta = (Tooltip = "Q3D_GameState 基类(C++)"))
class Q3D_LIB_API AQ3D_CPPA_GameState : public AGameStateBase
{
	GENERATED_BODY()

public:
	AQ3D_CPPA_GameState();
	~AQ3D_CPPA_GameState();

public:
	UFUNCTION(BlueprintCallable, Category = Q3D_GameState, meta = (Tooltip = "注册一个 PawnState/Pawn，其实是对应的 PlayerState 中注册"))
	void Q3D_F_PawnState_Inc(UQ3D_CPPU_PawnState *ptr_u_pawn_state, UPARAM(DisplayName = "bool_success") bool &bool_success, UPARAM(DisplayName = "string_log") FString &string_log);

	UFUNCTION(BlueprintCallable, Category = Q3D_GameState, meta = (Tooltip = "注销一个 PawnState/Pawn，其实是从对应的 PlayerState 中注销，返回该 Player 的下一个可操控的 PawnState/Pawn(空指针表示没有下一个)"))
	void Q3D_F_PawnState_Dec(UQ3D_CPPU_PawnState *ptr_u_pawn_state, UPARAM(DisplayName = "bool_success") bool &bool_success, UPARAM(DisplayName = "string_log") FString &string_log, UPARAM(DisplayName = "ptr_u_pawn_state_next") UQ3D_CPPU_PawnState *&ptr_u_pawn_state_next);

	UFUNCTION(BlueprintCallable, Category = Q3D_GameState, meta = (Tooltip = "设置一个 Spectator 的 PawnState/Pawn，其实是对应的 PlayerState 中注册"))
	void Q3D_F_PawnState_Spectator_Set(UQ3D_CPPU_PawnState *ptr_u_pawn_state, UPARAM(DisplayName = "bool_success") bool &bool_success, UPARAM(DisplayName = "string_log") FString &string_log);

	UFUNCTION(BlueprintCallable, Category = Q3D_GameState, meta = (Tooltip = "注销 Spectator 的 PawnState/Pawn，其实是对应的 PlayerState 中删除"))
	void Q3D_F_PawnState_Spectator_Unset(int32 int_player_index, UPARAM(DisplayName = "bool_success") bool &bool_success, UPARAM(DisplayName = "string_log") FString &string_log);

	UFUNCTION(BlueprintPure, Category = Q3D_GameState, meta = (Tooltip = "获取 Spectator 的 PawnState/Pawn，其实是从对应的 PlayerState 中获取，返回该 Player 的下一个可操控的 PawnState/Pawn(空指针表示没有下一个)"))
	void Q3D_F_PawnState_Spectator_Get(int32 int_player_index, UPARAM(DisplayName = "ptr_u_pawn_state_spectator") UQ3D_CPPU_PawnState *&ptr_u_pawn_state_spectator) const;
};
